home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PsL Monthly 1993 December
/
PSL Monthly Shareware CD-ROM (December 1993).iso
/
prgmming
/
dos
/
basic
/
pbtool.exe
/
CONVERT.BAS
< prev
next >
Wrap
BASIC Source File
|
1991-11-11
|
5KB
|
153 lines
' PROGRAM: CONVERT.BAS PROGRAMMER: ANDY KELLETT 04/19/91
' DATE-WRITTEN: 04/19/91 USING POWER BASIC v2.00
' THIS PROGRAM CONVERTS SPECIFIED CHARACTERS IN A FILE AND WRITES
' A NEW FILE TO DISK.
' UPDATE: WORKS WITH LARGER CHUNKS OF DATA FOR MUCHO SPEEDO.
' Last Updated: 11/11/91
'--------------------------------------------------------------------
$INCLUDE "CHARS.INC"
BUF.SIZE% = 4000
CLS
LOCATE 1,1:PRINT " ┌──────────────────────────────────────────────────────────────┐"
LOCATE 2,1:PRINT " │ THIS PROGRAM ALLOWS YOU TO CONVERT CHARACTERS IN A FILE. │"
LOCATE 3,1:PRINT " │ IF YOU WANT TO CONVERT ALL LINE-FEEDS (ASCII 10) TO A │"
LOCATE 4,1:PRINT " │ SPACE (ASCII 32) SIMPLY SPECIFY 10 AS THE ASCII VALUE │"
LOCATE 5,1:PRINT " │ OF THE OLD CHARACTER AND 32 AS THE ASCII VALUE OF THE │"
LOCATE 6,1:PRINT " │ NEW CHARACTER. ALL OCCURANCES OF LINE-FEED CHARACTERS │"
LOCATE 7,1:PRINT " │ WILL BE CONVERTED TO SPACES. TO EXIT WITHOUT DOING │"
LOCATE 8,1:PRINT " │ ANYTHING, SIMPLY USE A NON-EXISTANT FILE NAME FOR THE │"
LOCATE 9,1:PRINT " │ INPUT FILE OR AN EXISTING ONE FOR THE OUTPUT FILE. │"
LOCATE 10,1:PRINT " └──────────────────────────────────────────────────────────────┘"
CLS
locate 1,25:print "Convert - A. KELLETT"
LOCATE 2,15:PRINT "THIS PROGRAM CONVERTS SPECIFIED CHARACTERS FROM A FILE."
GOSUB FILEEXISTS
GOSUB GETCHARS
IF FILE1EOF& => BUF.SIZE% THEN
BUF.LEN& = BUF.SIZE%
ELSE
BUF.LEN& = FILE1EOF&
END IF
'*** OPEN BOTH FILES, READ & PROCESS & WRITE, CLOSE BOTH FILES ***
LOCATE 14,5:PRINT "WORKING ON BYTE: "
OPEN FILENAME1$ FOR BINARY AS #1
OPEN FILENAME2$ FOR BINARY AS #2
QUITFLAG% = 0
WHILE QUITFLAG% = 0
GET$ 1, BUF.LEN&, IN.BUFFER$
FOR I% = 1 TO LEN(IN.BUFFER$)
IF MID$(IN.BUFFER$, I%, 1) = CHAR.STRIP$ THEN
MID$(IN.BUFFER$, I%, 1) = CHAR.REPLACE$
END IF
NEXT I%
PUT$ 2, IN.BUFFER$
BYTES.READ& = BYTES.READ& + BUF.LEN&
LOCATE 14, 22:PRINT USING "###,###";BYTES.READ&
IF BYTES.READ& => FILE1EOF& THEN
QUITFLAG% = 1
ELSE
IF FILE1EOF& - BYTES.READ& < BUF.LEN& THEN
BUF.LEN& = FILE1EOF& - BYTES.READ& :REM** READ IN LEFTOVER BYTES **
END IF
END IF
WEND
CLOSE #2:CLOSE #1
LOCATE 16,10:PRINT "PROGRAM COMPLETED"
END
'
'
'----------------------------------------------------------
FILEEXISTS:
LOCATE 5,5:INPUT "NAME OF INPUT FILE: ";FILENAME1$
IF FILENAME1$ = "" THEN
PRINT "YOU MUST ENTER A FILE NAME -- PROGRAM ENDING. "
END
END IF
'*** CHECK VALIDITY OF INPUT FILE NAME ***
OPEN FILENAME1$ FOR BINARY AS #1
IF LOF(1) < 1 THEN
PRINT "THE INPUT FILE DOES NOT EXISTS."
CLOSE #1
KILL FILENAME1$
DELAY 2.5
LOCATE 22,1
END
END IF
FILE1EOF& = LOF(1)
CLOSE #1
LOCATE 6,5:INPUT "NAME OF OUTPUT FILE: ";FILENAME2$
'*** CHECK VALIDITY OF OUTPUT FILE NAME ***
OPEN FILENAME2$ FOR BINARY AS #2
IF LOF(2) > 1 THEN
PRINT "THE OUTPUT FILE ALREADY EXISTS."
CLOSE #2
KILL FILENAME2$
DELAY 2.5
LOCATE 22,1
END
END IF
CLOSE #2
RETURN
'
'
'----------------------------------------------------------
GETCHARS:
'---- GET CHARACTER USER WISHES TO REPLACE ----
TYPECHAR$ = ""
DO
LOCATE 7,5:PRINT "ENTER OLD (C)HARACTER OR (A)SCII VALUE: ";
INPUT TYPECHAR$
TYPECHAR$ = UCASE$(TYPECHAR$)
LOOP UNTIL (TYPECHAR$ = "C") OR (TYPECHAR$ = "A")
IF TYPECHAR$ = "C" THEN
INSTRING$ = ""
LOCATE 8,5:PRINT "ENTER CHARACTER: "
CALL GETCHAR(8,23,1,NORMAL$)
CHAR.STRIP$ = INSTRING$
ELSE
INSTRING$ = ""
LOCATE 8,5:PRINT "ENTER VALUE (0 - 255)"
CALL GETCHAR(8,27,3,NUMBER$)
IF VAL(INSTRING$) > 255 THEN
LOCATE 10,5:PRINT "ASCII VALUE CANNOT BE OVER 255!"
END
END IF
CHARSTRIPNUM = VAL(INSTRING$)
CHAR.STRIP$ = CHR$(CHARSTRIPNUM)
END IF
'---- GET CHARACTER TO REPLACE WITH ----
TYPECHAR$ = ""
DO
LOCATE 9,5:PRINT "ENTER NEW (C)HARACTER OR (A)SCII VALUE: ";
INPUT TYPECHAR$
TYPECHAR$ = UCASE$(TYPECHAR$)
LOOP UNTIL (TYPECHAR$ = "C") OR (TYPECHAR$ = "A")
IF TYPECHAR$ = "C" THEN
INSTRING$ = ""
LOCATE 10,5:PRINT "ENTER CHARACTER: "
CALL GETCHAR(10,23,1,NORMAL$)
CHAR.REPLACE$ = INSTRING$
ELSE
INSTRING$ = ""
LOCATE 10,5:PRINT "ENTER VALUE (0 - 255)"
CALL GETCHAR(10,27,3,NUMBER$)
IF VAL(INSTRING$) > 255 THEN
LOCATE 11,5:PRINT "ASCII VALUE CANNOT BE OVER 255!"
END
END IF
CHARREPLACENUM = VAL(INSTRING$)
CHAR.REPLACE$ = CHR$(CHARREPLACENUM)
END IF
RETURN
$INCLUDE "GETCHAR.INC"